﻿using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;


namespace ECommerce.DAO.SQL
{
    public static class Objeto
    {
        //Select Methods Helpers
        public static ECommerce.Model.Objeto[] GetObjetos(string StoreProcedure, ECommerce.DAO.SQL.Parámetro[] Parámetros)
        {
            ECommerce.Model.Objeto Objeto = new ECommerce.Model.Objeto();
            Type DynamicType = Objeto.GetType();
            return ECommerce.DAO.SQL.SqlHelper.Get(StoreProcedure, Parámetros, DynamicType);
        }

        //Select Methods
        public static ECommerce.Model.Objeto GetObjetoById(int Id)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Id);
            Parámetros.Add(Parámetro);
            ECommerce.Model.Objeto[] Comunicaciones = ECommerce.DAO.SQL.Objeto.GetObjetos("GetObjetoById", Parámetros.ToArray());
            if (Comunicaciones != null)
                if (Comunicaciones.Length > 0)
                    return Comunicaciones[0];
            return null;
        }
        public static ECommerce.Model.Objeto[] GetObjetosDelSistema()
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            return ECommerce.DAO.SQL.Objeto.GetObjetos("GetObjetoesDelSistema", Parámetros.ToArray());
        }
        public static ECommerce.Model.Objeto[] GetObjetosByPersonaId(int IdPersona)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new Parámetro("@Id", System.Data.SqlDbType.BigInt, IdPersona);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.Objeto.GetObjetos("GetObjetosByPersonaId", Parámetros.ToArray());
        }

        //Insert Methods
        public static int SetObjeto(ECommerce.Model.Objeto Objeto)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@Id", System.Data.SqlDbType.BigInt, Objeto.Id);
            Parámetros.Add(Parámetro);
            Parámetro = new ECommerce.DAO.SQL.Parámetro("@Denominación", System.Data.SqlDbType.NVarChar, Objeto.Denominación);
            Parámetros.Add(Parámetro);
            return ECommerce.DAO.SQL.SqlHelper.Insert("SetObjeto", Parámetros.ToArray());
        }
        public static void AddObjetoToPersona(ECommerce.Model.Objeto Objeto, ECommerce.Model.Personas.Persona Persona)
        {
            List<ECommerce.DAO.SQL.Parámetro> Parámetros = new List<ECommerce.DAO.SQL.Parámetro>();
            ECommerce.DAO.SQL.Parámetro Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdPersona", System.Data.SqlDbType.BigInt, Persona.Id);
            Parámetros.Add(Parámetro);
            Parámetro = new ECommerce.DAO.SQL.Parámetro("@IdObjeto", System.Data.SqlDbType.BigInt, Objeto.Id);
            Parámetros.Add(Parámetro);
            ECommerce.DAO.SQL.SqlHelper.Insert("AddObjetoToPersona", Parámetros.ToArray());
        }        




        //***************

        public static void LoadObjeto(ECommerce.Model.Objeto Objeto)
        {
            Objeto = ECommerce.DAO.SQL.Objeto.GetObjetoById(Objeto.Id);
        }
        public static int DelObjeto(ECommerce.Model.Objeto objeto)
        {
            int result = 0;
            using (SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Repuestos"].ConnectionString))
            {
                using (SqlCommand sqlComm = new SqlCommand("DelObjetoById"))
                {
                    sqlComm.CommandType = CommandType.StoredProcedure;
                    SqlParameter param = new SqlParameter();
                    param.SqlDbType = SqlDbType.BigInt;
                    param.Value = objeto.Id;
                    param.ParameterName = "@Id";
                    sqlComm.Parameters.Add(param);

                    sqlComm.Connection = sqlConn;
                    sqlConn.Open();
                    result = Convert.ToInt32(sqlComm.ExecuteScalar());
                    sqlConn.Close();
                }
            }
            return result;
        }

    }
}
